home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf
/
tracker.library
/
Demos
/
Mem.asm
< prev
next >
Wrap
Assembly Source File
|
1994-01-09
|
3KB
|
149 lines
;TestProgramm für "tracker.library"
; Testet TRK_AllocMem und TRK_FreeMem
NOLIST
INCLUDE "exec/LVO.i"
INCLUDE "exec/memory.i"
INCLUDE "dos/LVO.i"
INCLUDE "dos/dosextens.i"
INCLUDE "tracker.i"
LIST
_TrackerBase: EQUR a5
_DosBase: EQUR a4
Output: EQUR d7
; WB-Message ?
sub.l a1,a1 ;a1=0->eigener Task
CALLEXEC FindTask ;Wo darf man denn nachschauen ?
move.l d0,a0
tst.l pr_CLI(a0) ;von CLI oder WB aus gestartet ?
bne fromCLI
;von WB aus:
lea pr_MsgPort(a0),a0
move.l a0,-(sp)
CALLEXEC WaitPort ;auf Start-Message warten
move.l (sp)+,a0
CALLEXEC GetMsg ;muß nachher beantwortet werden
move.l d0,WBenchMsg
fromCLI:
; Tracker-Library öffnen
OPENLIB TrName
tst.l d0
beq ende_all
move.l d0,_TrackerBase
TRK_OPENSTDLIB DOS,36
tst.l d0
beq ende_trk
move.l d0,_DosBase
tst.l WBenchMsg
bne fromWB
;von CLI aus -> Ausgaben ins CLI-Fenster
CALLDOS Output
move.l d0,Output
bra main
;von WB aus gestartet -> eigenes Window nötig
fromWB: move.l #WdName,d1
move.l #MODE_OLDFILE,d2
CALLDOS Open
move.l d0,Output
;---------------------------------------------------------------------------
;Haupt-Testteil
ALLOC: MACRO ;Bytes, Typ, sichern in
move.l #\1,d0
move.l #\2,d1
bsr Alloc
move.l d0,\3
ENDM
FREE: MACRO ;wo gesichert
move.l \1,a1
bsr Free
ENDM
main: ALLOC 1111,MEMF_CLEAR,d6
ALLOC 55555,MEMF_PUBLIC,d5
ALLOC 12345,MEMF_CHIP!MEMF_CLEAR,d4
FREE d5
ALLOC 122,MEMF_ANY,d6 ;der alte Speicherzeiger wird absichtlich
; überschrieben; d3 gäbe vielleicht Seiten-
; Effekte mit der Ausgabe
FREE d4
;---------------------------------------------------------------------------
;ggf. Window schließen
tst.l WBenchMsg
beq ende_trk
move.l Output,d1
move.l #GoodBye,d2
move.l #GoodByeLen,d3 ;jetzt sind die Speicher-Pointer uninteressant
CALLDOS Write
move.l #150,d1
CALL Delay
move.l Output,d1
CALL Close
;Library schließen
ende_trk:
CLOSELIB _TrackerBase
ende_all:
tst.l WBenchMsg ;war da was ?
beq toCLI ;na dann halt nicht
;Message zur WB zurück
move.l WBenchMsg,a1
CALLEXEC ReplyMsg
toCLI: moveq #0,d0
rts
;---------------------------------------------------------------------------
;Unterroutine: TRK_AllocMem testen
;Parameter: d0 = Größe des gewünschten Speicherbereichs
; d1 = Anforderungen an den gewünschten Speicherbereich
;Ergebnis: Adresse des allozierten Speichers / 0 bei Fehler
Alloc: movem.l d2/d3,-(sp) ;d2/d3 sichern
movem.l d0-d2,-(sp) ;Parameter für Ausgabe sichern;
;d2 ist Platzhalter für das Ergebnis
CALLTRK TRK_AllocMem
move.l d0,8(sp)
move.l Output,d1
move.l #AllocText,d2
move.l sp,d3
CALLDOS VFPrintf
add.w #8,sp
movem.l (sp)+,d0/d2/d3 ;Ergebnis und d2/d3 holen
rts
;---------------------------------------------------------------------------
;Unterroutine: TRK_FreeMem testen
;Parameter: a1 = Adresse des Speicherbereichs
;Ergebnis: -
Free: move.l a1,d0
bne 1$
rts
1$: movem.l d2/d3/a1,-(sp) ;Register sichern
CALLTRK TRK_FreeMem
move.l Output,d1
move.l #FreeText,d2
moveq #8,d3
add.l sp,d3
CALLDOS VFPrintf
movem.l (sp)+,a2/a3/a1 ;Register zurück
rts
;---------------------------------------------------------------------------
WBenchMsg: dc.l 0
TrName: TRACKERNAME
AllocText: dc.b "%ld Bytes of Memory Type $%lx allocated at $%06lx",10,0
FreeText: dc.b "Memory at $%06lx freed",10,0
WdName: dc.b "CON:////AllocMem-Test für tracker.library",0
GoodBye: dc.b 10,"Bye - closing soon !"
GoodByeLen: equ *-GoodBye
END